package com.kimari.demo;

/**
 * 算法练习九
 * 求1000以内的完全数
 * 若一个自然数，
 * 恰好与除去它本身以外的一切因数的和相等，
 * 这种数叫做完全数。
 * 例如，6 = 1+2＋3
 * 28 = 1＋2＋4＋7＋14
 * 496 = 1+2+4+8＋16+31+62＋124
 *
 * @author Reimu
 */
public class Perfect {
    /**
     * 需要出的最大范围
     */
    private static final int MAX_NUM = 1000;

    /**
     * 先计算所选取的整数a
     * (a的取值1~1000)的因数，
     * 将各因数累加于m，若m等于a，
     * 则可确认a为完全数
     */
    public static void getPerfect() {
        //记录因数的和
        int sum = 0;
        //遍历 1-1000 的所有数字
        for (int i = 1; i <= MAX_NUM ; i++) {
            for (int j = 1; j < i; j++) {
                //累余
                if (i % j == 0) {
                    //累加
                    sum = sum + j;
                }
            }
            //如果因子之和它本身就输出
            if (sum == i) {
                System.out.println(i);
            }
            sum = 0;
        }
    }
}
